home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 145 / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin / tools / sharp / sxwork3.lzh / サンプル実用編 / 爆弾ゲーム / BOMB.H < prev    next >
Text File  |  1994-03-10  |  7KB  |  185 lines

  1. /******************************************************************************
  2.  *    bomb.h:        爆弾ゲーム用ヘッダファイル
  3.  ******************************************************************************
  4.  *    Workroom SX-68K Sample Program Copyright 1994 SHARP
  5.  *
  6.  *    定数定義
  7.  */
  8. /* ウィンドウタイトル */
  9. #define WINTITLE    ((_LASCII) "\x0a爆弾ゲーム")
  10.  
  11. #define MARGIN        10        /* ウィンドウの縁の幅        */
  12. #define INFO_HEIGHT    50        /* 情報フィールドの幅        */
  13. #define MAPX        30        /* マップワークの大きさ        */
  14. #define MAPY        16
  15.  
  16. #define TMWIDE        (30 + 2 + 2)    /* 経過時間表示領域の幅        */
  17. #define TMHEIGHT    (12 + 2 + 2)    /*             高さ    */
  18. #define TMMGX        (MARGIN + 6 + 50) /*             マージン    */
  19. #define TMMGY        4
  20.  
  21. #define RBTNWIDE    56        /* 再ゲームボタン幅        */
  22. #define RBTNHEIGHT    20        /*         高さ        */
  23. #define RBTNMGX        (MARGIN + 6)    /*         マージン    */
  24. #define RBTNMGY        4
  25.  
  26. /* セル座標から座標を計算する */
  27. #define GRID(x,y)    LONGWORD((x) * 16 + MARGIN, (y) * 16 + MARGIN * 2 + INFO_HEIGHT)
  28.  
  29. /* ウィンドウサイズを計算する */
  30. #define WSIZE(x,y)    LONGWORD((x) * 16 + MARGIN * 2, (y) * 16 + MARGIN * 3 + INFO_HEIGHT)
  31.  
  32. /* ベストタイム登録用ダイアログの表示位置 */
  33. #define DLG1_X        298        /* X座標        */
  34. #define DLG1_Y        202        /* Y座標        */
  35. #define DLG1_H        172        /* ダイアログの幅    */
  36. #define DLG1_V        108        /* ダイアログの高さ    */
  37.  
  38. /* ベストタイム表示用ダイアログの表示位置 */
  39. #define DLG2_X        254        /* X座標        */
  40. #define DLG2_Y        150        /* Y座標        */
  41. #define DLG2_H        260        /* ダイアログの幅    */
  42. #define DLG2_V        140        /* ダイアログの高さ    */
  43.  
  44. #define SCR_MARGIN    8        /* 上下左右の影付きフレームのマージン */
  45. /* ベストタイム記録ファイル用文字列バッファサイズ */
  46. #define BUFF_SIZE    60
  47. #define TIME_LIMIT    9999        /* タイムオーバーの時間        */
  48.  
  49. /* イベントマスク */
  50. #define EVENTMASK    (EM_IDLE | EM_MSLDOWN | EM_MSRDOWN | EM_UPDATE | EM_ACTIVATE | EM_SYSTEM1 | EM_SYSTEM2)
  51.  
  52. enum mapStatus {            /* fMap[iY][iX] = セルのステータス */
  53.     IDV_PLAIN,            /* 無印                */
  54.     IDV_VAL1,            /* 数字セル(1)            */
  55.     IDV_VAL2,            /* 数字セル(2)            */
  56.     IDV_VAL3,            /* 数字セル(3)            */
  57.     IDV_VAL4,            /* 数字セル(4)            */
  58.     IDV_VAL5,            /* 数字セル(5)            */
  59.     IDV_VAL6,            /* 数字セル(6)            */
  60.     IDV_VAL7,            /* 数字セル(7)            */
  61.     IDV_VAL8,            /* 数字セル(8)            */
  62.     IDV_BOM        = 0xff        /* 爆弾                */
  63. };
  64.  
  65. enum checkStatus {            /* fCheck[iX][iY] = セルの状態    */
  66.     IDC_FACE,            /* 未処理            */
  67.     IDC_FLAG,            /* 旗                */
  68.     IDC_QMARK,            /* ?マーク            */
  69.     IDC_PFACE    = 20,        /* オープンされたフィールド    */
  70.     IDC_PQMARK    = 22,        /* オープンされた?マーク    */
  71.     IDC_RBOM    = 0x0f,        /* 爆弾に当たった        */
  72.     IDC_CBOM    = 0xf0,        /* ×印爆弾            */
  73.     IDC_OPEN    = 0xff        /* オープンされたフィールド    */
  74. };
  75.  
  76. enum gameProgress {            /* sTrends = ゲーム進行状況    */
  77.     IDT_BEFORE,            /* 開始前            */
  78.     IDT_BEGIN,            /* 開始時            */
  79.     IDT_PLAYING,            /* 進行中            */
  80.     IDT_CLEAR,            /* クリアー終了時        */
  81.     IDT_OVER            /* オーバー終了時        */
  82. };
  83.  
  84. enum gameLevel {            /* level = ゲームレベル        */
  85.     IDL_BEG,            /* ビギナークラス        */
  86.     IDL_MID,            /* ミドルクラス            */
  87.     IDL_EXP                /* エキスパートクラス        */
  88. };
  89. /*
  90.  *    構造体宣言
  91.  */
  92. typedef struct CPoint {            /* セル座標            */
  93.     int x;
  94.     int y;
  95. } CPoint;
  96.  
  97. typedef struct ComVal {            /* 共通変数            */
  98.     Window *windowPtr;        /* ウィンドウポインタ        */
  99.     BOOLEAN activeFlag;        /* アクティブフラグ        */
  100.     TsEvent event;            /* イベントレコード        */
  101.     int eventMask;            /* イベントマスク        */
  102.     int errorCode;            /* エラーコード            */
  103.     BOOLEAN endFlag;        /* 終了フラグ            */
  104.     Rect rcReplay;            /* 再ゲームボタンのレクタングル    */
  105.     LASCII player;            /* プレーヤーの名前        */
  106.     char myPath[TS_NAMEMAX];    /* 自分の起動パス名        */
  107.     char myName[24];        /* 自分のタスク名        */
  108.     Handle resDiEnt;        /* ダイアログアイテムのハンドル1 */
  109.     Handle resDiRec;        /* ダイアログアイテムのハンドル2 */
  110.     int level;            /* ゲームのレベル        */
  111.     int bombNum;            /* 爆弾の数            */
  112.     int gridX;            /* 水平マス数            */
  113.     int gridY;            /* 垂直マス数            */
  114.     int sTrends;            /* ゲームの進行状態        */
  115.     int seconds;            /* 経過タイム            */
  116.     int oldTime;            /* 前回のシステム時間        */
  117.     int restCell;            /* 未処理セル数            */
  118.     int restFlag;            /* 残り旗数            */
  119.     unsigned char fCheck[MAPY][MAPX]; /* 各マスの現在の状態        */
  120.     unsigned char fMap[MAPY][MAPX]; /* 爆弾の埋まっているマップ    */
  121.     /* ベストタイム記録ファイル用文字列バッファ */
  122.     char record[3][BUFF_SIZE];
  123.     RectImg **btnImg[8];        /* イメージハンドル        */
  124.     RectImg **numImg[8];
  125.     RectImg **bombImg[4];
  126. } ComVal;
  127. /*
  128.  *    関数プロトタイプ
  129.  */
  130. /* bmmain.c */
  131. BOOLEAN init(ComVal *);            /* 初期化処理            */
  132. BOOLEAN createWindow(ComVal *);
  133. void idleEvent(ComVal *);        /* アイドルイベント処理        */
  134. void msLDownEvent(ComVal *);        /* マウスレフトダウンイベント処理 */
  135. void msRDownEvent(ComVal *);        /* マウスライトダウンイベント処理 */
  136. void selectMenu(ComVal *);        /* ポップアップメニューの作成と選択 */
  137. void keyDownEvent(ComVal *);        /* キーダウンイベント処理    */
  138. void updateEvent(ComVal *);        /* アップデートイベント処理    */
  139. void drawGraph(ComVal *);
  140. void activateEvent(ComVal *);        /* アクティベートイベント処理    */
  141. void systemEvent(ComVal *);        /* シスイベント処理        */
  142. void showErrDialog(ComVal *);
  143. void endProc(int, ComVal *);        /* 終了処理            */
  144. int findOwn(ComVal *);            /* 自分と同じ名前のタスクを捜す    */
  145. void addUpdate(Window *, Rect *);    /* アップデートイベントの発生    */
  146.  
  147. /* bomb.c */
  148. /* ポインタ座標からセル座標を計算する */
  149. BOOLEAN getGrid(ComVal *, LPoint, CPoint *);
  150. void drawCell(ComVal *);        /* セルマップの再描画処理    */
  151. void changeLevel(ComVal *, int);    /* ゲームレベル変更処理        */
  152. void enterDlg(ComVal *);        /* ベストタイム保持用ダイアログ作成 */
  153. int enterFilter(Dialog *, Event *);    /* ダイアログ上のイベント処理    */
  154. void recordDlg(ComVal *);        /* ベストタイム表示用ダイアログ作成 */
  155. int recordFilter(Dialog *, Event *);    /* ダイアログ上のイベント処理    */
  156. void setDItemText(Dialog *, int, _LASCII);
  157. void getDItemText(Dialog *, int, _LASCII);
  158. BOOLEAN mountImgRes(ComVal *);        /* ビットイメージのハンドルを確保 */
  159. /* "爆弾ゲーム.lb" をカレントリソースに */
  160. BOOLEAN loadResource(ComVal *pcv);
  161. void drawPat3(RectImg **, LPoint);    /* 'PAT3'の描画            */
  162. void drawPat4(RectImg **, LPoint);    /* 'PAT4'の描画            */
  163. void getParam(ComVal *, char **);    /* オプションスイッチの処理    */
  164.  
  165. void initMap(ComVal *, CPoint *);    /* セルマップ初期化(BOM配置)    */
  166. void clearGame(ComVal *);        /* ゲームクリアー処理        */
  167. void regame(ComVal *);            /* 再ゲーム処理            */
  168. void bestTime(ComVal *);        /* ベストタイム保持処理        */
  169. void drawBitmap(ComVal *, CPoint *);    /* セル描画            */
  170. void drawMark(ComVal *, int, int, unsigned char); /* 旗描画        */
  171. void setValue(ComVal *, int, int);    /* 爆弾のカウント        */
  172. void safetyZone(ComVal *, CPoint *);    /* 爆弾のないセルのオープン    */
  173. void openCell(ComVal *, CPoint *);    /* セルを開く            */
  174. void openAllBomb(ComVal *, CPoint *);    /* 全部の爆弾のセルを開く    */
  175. void searchMesh(ComVal *, CPoint *);    /* 爆弾の放射状サーチ        */
  176. void openBomb(ComVal *, int, int);    /* 爆弾のセルを開く        */
  177. void timeCounter(ComVal *);        /* 経過タイムのカウント処理    */
  178. void drawZan(ComVal *);            /* 爆弾残数の表示        */
  179. void drawTime(ComVal *);        /* 経過タイムの表示        */
  180. void drawRgBtn(ComVal *);        /* 再ゲームボタンの表示        */
  181. /* ピクチャーボタンの押された処理 */
  182. BOOLEAN checkPctBtn(ComVal *, Rect *, LPoint);
  183. void revFillRect(Rect *);        /* レクタングル全体を反転    */
  184. void revFrameRect(Rect *);        /* レクタングルのフレームを反転    */
  185.